﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ferreteria.Clases;
using System.IO;
using Microsoft.Office.Interop.Excel;

namespace Ferreteria.Forms.Informes
{
    public partial class FrmGenerarIVAVentas : Form
    {
        DisancoEntities context;
        System.Data.DataTable dtLibroVta;
        int Año;
        int Mes;
        private System.Drawing.Font miniprintFont = new System.Drawing.Font("Calibri", 7);
        private System.Drawing.Font printFont = new System.Drawing.Font("Calibri", 8);
        private System.Drawing.Font printFontNormal10 = new System.Drawing.Font("Calibri", 10);
        private System.Drawing.Font printFontTit = new System.Drawing.Font("Calibri", 12);
        private System.Drawing.Font printFontTotal = new System.Drawing.Font("Calibri", 13);
        int nrohoja;
        int maxLineas;
        int countArticulos;
        bool fin= false;
        decimal totalri;
        decimal totalcf;
        decimal totalrni;
        decimal totalex;
        decimal totalmt;
        decimal tothojaimpnetog;
        decimal tothojaivaimporte;
        decimal tothojaimportetot;
        decimal QueryIVAa;
        decimal QueryIVANC;
        private decimal[,] matTotales = new decimal[3,5];
        public FrmGenerarIVAVentas()
        {
            InitializeComponent();
            CrearGrilla();
            InicializarContadores();
            NumUpDAño.Value = DateTime.Now.Year;
            if (DateTime.Now.Month > 1)
                NumUpDMes.Value = (DateTime.Now.Month - 1);
            else
                NumUpDMes.Value = 1;
            bttnexportexcel.Enabled = false;
            bttnGenerarReporte.Enabled = false;
            for (int i = 0; i < 3; i++)
			{
                matTotales[i, 0] = 0;// NETO
                matTotales[i, 1] =0;// DESCUENTO
                matTotales[i, 2] = 0;// SUBTOTAL CON DESCUENTO
                matTotales[i, 3] =0;// IVA
			}          
        }
       
        //Procesos
        private void CrearGrilla()
        {
            dtLibroVta = new System.Data.DataTable();

            dtLibroVta.Columns.Add("Cliente");
            dtLibroVta.Columns.Add("Cond. Iva");
            dtLibroVta.Columns.Add("CUIT");
            dtLibroVta.Columns.Add("Fecha");
            dtLibroVta.Columns.Add("Tipo Comp.");
            dtLibroVta.Columns.Add("Numero Comp.");
            dtLibroVta.Columns.Add("Subtotal");
            dtLibroVta.Columns.Add("Descuento");
            dtLibroVta.Columns.Add("IVA");
            dtLibroVta.Columns.Add("Monto Total");
            dtLibroVta.Columns.Add("Estado");
        }
      
        private void GenerarReporteLibroIva()
        {
            printDocumentIVA.PrinterSettings.Copies = 1;
            printDialogIVA.Document = printDocumentIVA;// Si hay q imprimir una sola Factura 
            printDocumentIVA.DefaultPageSettings.Landscape = false;
            DialogResult resultadounico = printDialogIVA.ShowDialog();

            if (resultadounico == DialogResult.OK)
            {
                printDocumentIVA.PrinterSettings = printDialogIVA.PrinterSettings;
                printPreviewDialogIVA.Document = printDocumentIVA;
                ((Form)printPreviewDialogIVA).WindowState = FormWindowState.Maximized;
                printPreviewDialogIVA.ShowDialog();

            }
        }
        
        public void exporta_a_excel(DataGridView dgv)
        {
            // creating Excel Application 

            Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();

            // creating new WorkBook within Excel application 

            Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);

            // creating new Excelsheet in workbook 

            Microsoft.Office.Interop.Excel._Worksheet worksheet = null;

            // see the excel sheet behind the program 

            app.Visible = true;

            // get the reference of first sheet. By default its name is Sheet1. 

            // store its reference to worksheet 

            app.SheetsInNewWorkbook = 1;
            worksheet = workbook.ActiveSheet;
            // changing the name of active sheet 

            int año = Convert.ToInt32(NumUpDAño.Value);
            int mes = Convert.ToInt32(NumUpDMes.Value);
            string name = "Export" + año + "-" + mes;
            worksheet.Name = name;

            DataGridView dataGridView1 = dgv;

            // storing header part in Excel 

            for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
            {

                worksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;

            }

            // storing Each row and column value to excel sheet 
            int columnas = dataGridView1.Columns.Count;
            int filas = dataGridView1.Rows.Count;

            for (int i = 0; i < filas; i++)
            {

                for (int j = 0; j < columnas; j++)
                {

                    worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();

                }

            }

            //save the application 
            //este aleatorio es para q no de error al crear cuando este abierto el mismo reporte
            Random al = new Random();
            int aleatorio = al.Next(10,1010110);
            string file = ("IVAventas" + año + "-" + mes + "-" + aleatorio + ".xls");
            workbook.SaveAs(file, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
            Type.Missing);


            //Exit from the application 

            app.Quit();




            ////Microsoft.Office.Interop.Excel.ApplicationClass excel = new ApplicationClass();


            ////excel.Application.Workbooks.Add(true);

            //int ColumnIndex = 0;

            //foreach (DataGridViewColumn col in TuDataGrid.Columns)
            //{

            //    ColumnIndex++;

            //    app.Cells[1, ColumnIndex] = col.Name;

            //}

            //int rowIndex = 0;

            //foreach (DataGridViewRow row in TuDataGrid.Rows)
            //{

            //    rowIndex++;

            //    ColumnIndex = 0;

            //    foreach (DataGridViewColumn col in TuDataGrid.Columns)
            //    {

            //        ColumnIndex++;

            //        app.Cells[rowIndex + 1, ColumnIndex] = row.Cells[col.Name].Value;

            //    }

            //}

            ////excel.Visible = true;


            ////Worksheet worksheet = (Worksheet)excel.ActiveSheet;


        }

        private void InicializarContadores()
        {
            countArticulos = 0;
            nrohoja = 1;
            //maxLineas = 50;
            maxLineas = 50;
        }

       //Eventos
        private void btnGenerarIvaVta_Click(object sender, EventArgs e)
        {
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

            Mes = Convert.ToInt32(NumUpDMes.Value);
            Año = Convert.ToInt32(NumUpDAño.Value);

            dtLibroVta.Rows.Clear();

            //Busco las Ventas (A y B) y las Notacreditos (C) del mes correspondiente

            var QueryA = from ventas in context.Ventas
                         //where ventas.venta_estado == Estado.Emitida
                         where ventas.venta_tipo_comprobante == "A"
                         where ventas.venta_fecha.Month == Mes
                         where ventas.venta_fecha.Year == Año
                         select ventas;
            var QueryB = from ventas in context.Ventas
                         //where ventas.venta_estado == Estado.Emitida
                         where ventas.venta_tipo_comprobante == "B"
                         where ventas.venta_fecha.Month == Mes
                         where ventas.venta_fecha.Year == Año
                         select ventas;

            var querynotacred = from ncred in context.NotasCredito
                                where ncred.notacred_fecha.Month == Mes
                                where ncred.notacred_fecha.Year == Año
                                //where ncred.notacred_estado == Estado.Emitida
                                select ncred;

            bool SinVentas = true;
            if (QueryA.Count() == 0)
            {
                if (QueryB.Count() == 0)
                {
                    MessageBox.Show("No se Registran Ventas en ese Periodo", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    NumUpDAño.Value = DateTime.Now.Year;
                    NumUpDMes.Value = (DateTime.Now.Month - 1);
                    SinVentas = false;
                }
            }

                if (SinVentas)
                {
                    foreach (Ventas venta in QueryA)
                    {
                        DataRow fila = dtLibroVta.NewRow();
                        fila["Cliente"] = venta.Clientes.cliente_nombre;
                        fila["Cond. Iva"] = venta.Clientes.CondicionIVA.condicion_sigla;
                        fila["CUIT"] = venta.Clientes.cliente_cuit;
                        fila["Fecha"] = venta.venta_fecha.Date.ToShortDateString();
                        fila["Tipo Comp."] = venta.venta_tipo_comprobante;
                        fila["Numero Comp."] = venta.venta_nro_inicio.ToString("0000-00000000");
                        fila["Subtotal"] = venta.venta_subtotal;
                        decimal desc = Math.Round(venta.venta_descuento * venta.venta_subtotal, 2);
                        fila["Descuento"] = desc;
                        fila["IVA"] = venta.venta_iva;
                       //acumulo IVA armando grilla
                        QueryIVAa = QueryIVAa + venta.venta_iva;
                        fila["Monto Total"] = Math.Round((Convert.ToDecimal(venta.venta_monto)), 2);
                        fila["Estado"] = venta.venta_estado;
                        dtLibroVta.Rows.Add(fila);
                        matTotales[0, 0] =  matTotales[0, 0]+ venta.venta_subtotal;// NETO
                        matTotales[0, 1] = matTotales[0, 1] + desc;// DESCUENTO
                        matTotales[0, 2] = matTotales[0, 2] + (venta.venta_subtotal - desc);// SUBTOTAL CON DESCUENTO
                        matTotales[0, 3] = matTotales[0, 3] + venta.venta_iva;// IVA
                        matTotales[0, 4] = matTotales[0, 4] + Math.Round((Convert.ToDecimal(venta.venta_monto)), 2);// MONTO TOTAL

                    }
                    foreach (Ventas venta in QueryB)
                    {
                        DataRow fila = dtLibroVta.NewRow();

                        fila["Cliente"] = venta.Clientes.cliente_nombre;
                        fila["Cond. Iva"] = venta.Clientes.CondicionIVA.condicion_sigla;
                        fila["CUIT"] = venta.Clientes.cliente_cuit;
                        fila["Fecha"] = venta.venta_fecha.Date.ToShortDateString();
                        fila["Tipo Comp."] = venta.venta_tipo_comprobante;
                        fila["Numero Comp."] = venta.venta_nro_inicio.ToString("0000-00000000");
                        // desagregar IVA
                        decimal desc = Math.Round(venta.venta_descuento * venta.venta_subtotal, 2);//subtotal es sin el descuento
                        
                        decimal neto = Math.Round(Convert.ToDecimal((venta.venta_monto / Convert.ToDecimal(1.21))),2);
                        fila["Subtotal"] = neto;
                        fila["Descuento"] = desc;
                        decimal iva = Math.Round(Convert.ToDecimal(venta.venta_monto - neto),2);
                        fila["IVA"] = iva;
                       // QueryIVAb = QueryIVAb + iva;
                        fila["Monto Total"] = Math.Round((Convert.ToDecimal(venta.venta_monto)), 2);
                        fila["Estado"] = venta.venta_estado;

                        //fila["Subtotal"] = venta.venta_subtotal;
                        //decimal desc = Math.Round(venta.venta_descuento * venta.venta_subtotal, 2);
                        //fila["Descuento"] = desc;
                        //fila["IVA"] = venta.venta_iva;
                   
                        //acumulo IVA armando grilla 
                        // falta calcular todo esto
                        //QueryIVAb = QueryIVAb + venta.venta_iva;
                        //fila["Monto Total"] = Math.Round((Convert.ToDecimal(venta.venta_monto)), 2);
                        //fila["Estado"] = venta.venta_estado;
                        dtLibroVta.Rows.Add(fila);

                        matTotales[1, 0] = matTotales[1, 0] + neto;// NETO
                        matTotales[1, 1] = matTotales[1, 1] + desc;// DESCUENTO
                        matTotales[1, 2] = matTotales[1, 2] + (neto - desc);// SUBTOTAL CON DESCUENTO
                        matTotales[1, 3] = matTotales[1, 3] + iva;// IVA
                        matTotales[1, 4] = matTotales[1, 4] + Math.Round((Convert.ToDecimal(venta.venta_monto)), 2);// MONTO TOTAL

                    }

                    foreach (NotasCredito notascredito in querynotacred)
                    {
                        DataRow filanc = dtLibroVta.NewRow();

                        filanc["Cliente"] = notascredito.Ventas.Clientes.cliente_nombre;
                        filanc["Cond. Iva"] = notascredito.Ventas.Clientes.CondicionIVA.condicion_sigla;
                        filanc["CUIT"] = notascredito.Ventas.Clientes.cliente_cuit;
                        filanc["Fecha"] = notascredito.notacred_fecha.Date.ToShortDateString();
                        filanc["Tipo Comp."] = "NC";
                        filanc["Numero Comp."] = notascredito.notacred_nro.ToString("0000-00000000");
                        filanc["Subtotal"] = -(notascredito.notacred_subtotal);
                        decimal desc = Math.Round(notascredito.notacred_descuento * notascredito.notacred_subtotal, 2);
                        filanc["Descuento"] = -(desc);
                        filanc["IVA"] = -(notascredito.notacred_iva);
                       // acumulo iva armando grilla ya
                        QueryIVANC = QueryIVANC -(notascredito.notacred_iva); ;
                        filanc["Monto Total"] = -(Math.Round((Convert.ToDecimal(notascredito.notacred_monto)), 2));
                        filanc["Estado"] = notascredito.notacred_estado;
                        dtLibroVta.Rows.Add(filanc);

                        matTotales[2, 0] = matTotales[2, 0] + notascredito.notacred_subtotal;// NETO
                        matTotales[2, 1] =  matTotales[2, 1] + desc;// DESCUENTO
                        matTotales[2, 2] = matTotales[2, 2] + (notascredito.notacred_subtotal - desc);// SUBTOTAL CON DESCUENTO
                        matTotales[2, 3] =  matTotales[2, 3] + notascredito.notacred_iva;// IVA
                        matTotales[2, 4] =  matTotales[2, 4] + Math.Round((Convert.ToDecimal(notascredito.notacred_monto)), 2);// MONTO TOTAL
             }
                    dgLibroVentas.DataSource = dtLibroVta;
                    dgLibroVentas.Sort(dgLibroVentas.Columns["Fecha"], ListSortDirection.Ascending);
                    dgLibroVentas.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                    dgLibroVentas.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                    bttnexportexcel.Enabled = true;
                    bttnGenerarReporte.Enabled = true;
                }

            }
        

        private void bttnGenerarReporte_Click(object sender, EventArgs e)
        {
            GenerarReporteLibroIva();
            
        }

        private void bttnexportexcel_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("¿Desea Exportar a Excel?", "Confirme la operación", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (dr == System.Windows.Forms.DialogResult.Yes)
            {
                exporta_a_excel(dgLibroVentas);
            }
        }

        private void printDocumentIVA_PrintPage_1(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
            int margenX = 25;
            int margenY = 50;
            int anchoHoja = 800;

            PointF punto = new PointF();
            punto.X = anchoHoja / 2;
            punto.Y = margenY + 30;

            StringFormat formato = new StringFormat();
            formato.Alignment = StringAlignment.Center;

            // Lo que kda fijo en cada HOJA del ENCABEZADO
            DateTime fechaDesde = new DateTime(Año, Mes, 1);
            DateTime fechaHasta = Convert.ToDateTime(Año.ToString() + "-" + Mes.ToString() + "-" + DateTime.DaysInMonth(Año, Mes));// new DateTime(Año, Mes, 31);
            
            int lnencabezppal = 10;
            int column1ppal = 50;

            string RazonSocial = "DISANCO Sanitarios";
            string Direccion = "Ex-Via 1850 (Entre Paraguay y Jujuy) -3400 - Corrientes";
            string CUIT = "CUIT: 22-11232940-5";
            string leyendaFechaDesde = "DESDE";
            string leyendaFechaHasta = "HASTA ";
            String tpte = "TRANSPORTE";

            e.Graphics.DrawString("HOJA:", printFontNormal10, Brushes.Black, 700, lnencabezppal - 2);
            e.Graphics.DrawString(RazonSocial, printFontTit, Brushes.Black, column1ppal, lnencabezppal);
            e.Graphics.DrawString(Direccion, printFontNormal10, Brushes.Black, column1ppal, lnencabezppal + 15);
            e.Graphics.DrawString(CUIT, printFontNormal10, Brushes.Black, column1ppal, lnencabezppal + 30);
            e.Graphics.DrawString(leyendaFechaDesde, printFontNormal10, Brushes.Black, column1ppal + 200, lnencabezppal + 45);
            e.Graphics.DrawString(leyendaFechaHasta, printFontNormal10, Brushes.Black, column1ppal + 400, lnencabezppal + 45);
            e.Graphics.DrawString(fechaDesde.ToShortDateString(), printFontNormal10, Brushes.Black, column1ppal + 280, lnencabezppal + 45);
            e.Graphics.DrawString(fechaHasta.ToShortDateString(), printFontNormal10, Brushes.Black, column1ppal + 480, lnencabezppal + 45);

            int inc = 30;
            int lineainencabezado = 85;
            int lineasubencabezado = lineainencabezado + 15;
            int column1 = 200;
            int posCol_1 = column1 - 175; //COMPROBANTE
            int posCol_2 = posCol_1 + 150;//NETO
            int posCol_3 = posCol_2 + 100;//DESCUENTO
            int posCol_4 = posCol_3 + 100;//SUBTOTAL CN DESCUENTO
            int posCol_5 = posCol_4 + 150;//IVA
            int posCol_6 = posCol_5 + 100;//TOTAL
            int posCateg = column1 + 260;
            int posCUIT = column1 + 275;
            
            int posImporteg = column1 + 320 + inc;
            int posivaporc = column1 + 380 + inc;
            int posivaimporte = column1 + 420 + inc;
            int postotalcomp = column1 + 500;

            e.Graphics.DrawLine(Pens.Black, 10, 70, 800, 70);
            e.Graphics.DrawLine(Pens.Black, 15, lineainencabezado + 15, 180, lineainencabezado + 15);
            e.Graphics.DrawLine(Pens.Black, 190, lineainencabezado + 15, 520 , lineainencabezado + 15);
            e.Graphics.DrawLine(Pens.Black, 590 + inc, lineainencabezado + 15, 660 + inc , lineainencabezado + 15);

            String Comprobante = "Comprobante";
            e.Graphics.DrawString(Comprobante, printFontNormal10, Brushes.Black, column1 - 150, lineainencabezado);
            String Cliente = "Cliente";
            e.Graphics.DrawString(Cliente, printFontNormal10, Brushes.Black, column1 + 80, lineainencabezado);
            String Imp = "Importe Neto";
            e.Graphics.DrawString(Imp, printFontNormal10, Brushes.Black, column1 + 300 + inc, lineainencabezado);
            String grav = "Gravado";
            e.Graphics.DrawString(grav, printFontNormal10, Brushes.Black, posImporteg , lineasubencabezado);
            String iva = "IVA";
            e.Graphics.DrawString(iva, printFontNormal10, Brushes.Black, column1 + 400 + inc, lineainencabezado);
            String ImporteTotal = "Total del Comp.";
            e.Graphics.DrawString(ImporteTotal, printFontNormal10, Brushes.Black, postotalcomp, lineainencabezado);
            String Comptipo = "Tipo";
            e.Graphics.DrawString(Comptipo, printFontNormal10, Brushes.Black, posCol_1, lineasubencabezado);
            String Compnro = "Numero";
            e.Graphics.DrawString(Compnro, printFontNormal10, Brushes.Black, column1 - 140, lineasubencabezado);
           
            String Razons = "Razon Social";
            e.Graphics.DrawString(Razons, printFontNormal10, Brushes.Black, column1, lineasubencabezado);
            String Categ = "Categ.";
            e.Graphics.DrawString(Categ, printFont, Brushes.Black, posCateg - 15, lineasubencabezado);
            String Cuit = "CUIT";
            e.Graphics.DrawString(Cuit, printFontNormal10, Brushes.Black, posCUIT + 15, lineasubencabezado);
            String Ivaporc = " % ";
            e.Graphics.DrawString(Ivaporc, printFont, Brushes.Black, posivaporc + 5, lineasubencabezado);
            String Ivaimporte = "Importe";
            e.Graphics.DrawString(Ivaimporte, printFontNormal10, Brushes.Black, posivaimporte - 5, lineasubencabezado);

            // Lo que es VARIABLE en cada HOJA del ENCABEZADO
            e.Graphics.DrawString(Convert.ToString(nrohoja), printFontNormal10, Brushes.Black, 750, lnencabezppal - 2);

            //Proceso de dibujado de las lineas de factura
            int lntransporte = lineasubencabezado + 20;
            int posY = lineasubencabezado + 40;
            int anchoLinea = 8;
            //int posNroComp = 9 + 20;
            int posRazonS =70;
            int posfecha = posRazonS + 30;

            int countLineas = 0;
            int maxArticulos = dgLibroVentas.Rows.Count;
            String fecha = "Fecha";
            e.Graphics.DrawString(fecha, printFontNormal10, Brushes.Black, posfecha + 20 , lineasubencabezado);

            if (nrohoja > 1)
            {
                e.Graphics.DrawLine(Pens.Black, posCol_1 + 105, lntransporte + 10, posImporteg - 25, lntransporte + 10);
                e.Graphics.DrawString(tpte, printFontNormal10, Brushes.Black, posCol_1 + 5, lntransporte);
                e.Graphics.DrawString(Convert.ToString(tothojaimpnetog), printFontNormal10, Brushes.Black, posImporteg - 5, lntransporte);
                e.Graphics.DrawString(Convert.ToString(tothojaivaimporte), printFontNormal10, Brushes.Black, posivaimporte  , lntransporte);
                e.Graphics.DrawString(Convert.ToString(tothojaimportetot), printFontNormal10, Brushes.Black, postotalcomp + 4 + inc, lntransporte);
            }

            while (countLineas < maxLineas && countArticulos < maxArticulos)
            {
                DataGridViewRow fila = dgLibroVentas.Rows[countArticulos];

               string tipocomp = fila.Cells["Tipo Comp."].Value.ToString();
               e.Graphics.DrawString(tipocomp, printFont, Brushes.Black, posCol_1 + 5, posY);
               e.Graphics.DrawString(fila.Cells["Numero Comp."].Value.ToString(), printFont, Brushes.Black, posCol_1 + 20, posY);
                e.Graphics.DrawString(fila.Cells["Cliente"].Value.ToString(), miniprintFont, Brushes.Black, posRazonS + 100, posY + 1 );
                e.Graphics.DrawString(fila.Cells["Fecha"].Value.ToString(), miniprintFont, Brushes.Black, posfecha + 20, posY + 1);
                string condiva = fila.Cells["Cond. Iva"].Value.ToString();
                e.Graphics.DrawString(condiva, miniprintFont, Brushes.Black, posCateg , posY + 1);
                //oculto el cuit si el cliente es CF
                if (condiva != "CF")
                { e.Graphics.DrawString(fila.Cells["CUIT"].Value.ToString(), miniprintFont, Brushes.Black, posCUIT, posY + 1); }
           
                e.Graphics.DrawString(Convert.ToString("21.00"), miniprintFont, Brushes.Black, posivaporc + 3, posY + 1);
            
                //aplicar descuento 
                decimal ivafila = 0;
                decimal desc = Convert.ToDecimal(fila.Cells["Descuento"].Value);      // viene redondeado      
                decimal subtotaldesc = Convert.ToDecimal(Convert.ToDecimal(fila.Cells["Subtotal"].Value) - (desc));
                 
                decimal montofila = Convert.ToDecimal(fila.Cells["Monto Total"].Value.ToString());
                ivafila = Convert.ToDecimal(fila.Cells["IVA"].Value);
                e.Graphics.DrawString(fila.Cells["IVA"].Value.ToString(), printFont, Brushes.Black, posivaimporte + 4, posY);
                e.Graphics.DrawString(Convert.ToString(subtotaldesc), printFont, Brushes.Black, posImporteg, posY);
                e.Graphics.DrawString(Convert.ToString(montofila), printFont, Brushes.Black, postotalcomp + 25, posY);
                posY += anchoLinea;

                string TipoComp = fila.Cells["Tipo Comp."].Value.ToString();
                string condivacli = fila.Cells["Cond. Iva"].Value.ToString();
        
                tothojaimpnetog = tothojaimpnetog + subtotaldesc; 
                tothojaivaimporte = tothojaivaimporte + ivafila;
                tothojaimportetot = tothojaimportetot + montofila;
                  
                countArticulos++;
                countLineas++;
                posY = posY + anchoLinea;
            }
            int lntotaleshoja = posY + 20;

            //TOTALES DE LAS LINEAS DEL REPORTE
            e.Graphics.DrawString("$  " + Convert.ToString(tothojaimpnetog), printFontNormal10, Brushes.Black, posImporteg - 5, lntotaleshoja);
            e.Graphics.DrawString("$  " + Convert.ToString(tothojaivaimporte), printFontNormal10, Brushes.Black, posivaimporte - 5, lntotaleshoja);
            e.Graphics.DrawString("$  " + Convert.ToString(tothojaimportetot), printFontNormal10, Brushes.Black, postotalcomp + 20, lntotaleshoja);
            e.Graphics.DrawLine(Pens.Black, posCol_1 + 105, lntotaleshoja + 10, posImporteg - 25, lntotaleshoja + 10);
            if (countArticulos == maxArticulos)
            {
                fin = true;
                InicializarContadores();
                e.HasMorePages = false;
            }
            else
            {
                e.Graphics.DrawString(tpte, printFontNormal10, Brushes.Black, posCol_1 + 5, lntotaleshoja);
                e.Graphics.DrawLine(Pens.Black, posCol_1 + 105, lntotaleshoja + 10, posImporteg - 25, lntotaleshoja + 10); // TPTE final de Hoja
                nrohoja = nrohoja + 1;
                fin = false;
                e.HasMorePages = true;
            }

            if (fin)
            {
                int separador = 15;
                int lineafin = 980;
                int sublineafin = lineafin + separador;
                int lineafinintermedia = sublineafin + separador + 4;
                int sublineafinintermedia = lineafinintermedia + separador + 4;
                int lineafinletrachica = sublineafinintermedia + separador + 4;
                int sublineafinchica = lineafinletrachica + separador + 5;
                int posSubtotX = 22;
                decimal totalxcategcli = totalcf + totalex + totalmt + totalri + totalrni;
            
                e.Graphics.DrawString("TOTALES", printFontNormal10, Brushes.Black, posCol_1 + 5, lntotaleshoja); // FIN DE LAS LINEAS
                //ACA EMPIEZA EL RESUMEN DE ABAJO COMPLETO
                e.Graphics.DrawString("TOTALES", printFontNormal10, Brushes.Black, posSubtotX + 8, lineafin);
                e.Graphics.DrawLine(Pens.Black, posSubtotX + 80, lineafin + 10, 750, lineafin + 10);
                e.Graphics.DrawString("COMPROBANTE", printFontNormal10, Brushes.Black, posCol_1, sublineafin);
                e.Graphics.DrawString("NETO", printFontNormal10, Brushes.Black, posCol_2 + 5, sublineafin);
                e.Graphics.DrawString("DESCUENTO", printFontNormal10, Brushes.Black, posCol_3 - 10, sublineafin);
                e.Graphics.DrawString("SUBTOTAL/DESC.", printFontNormal10, Brushes.Black, posCol_4 -10, sublineafin);
                e.Graphics.DrawString("IVA", printFontNormal10, Brushes.Black, posCol_5 + 5, sublineafin);
                e.Graphics.DrawString("TOTAL", printFontNormal10, Brushes.Black, posCol_6, sublineafin);
                e.Graphics.DrawLine(Pens.Black, 20, sublineafin + 17, 750, sublineafin + 17);

                e.Graphics.DrawString("FACTURA A", printFontNormal10, Brushes.Black, posCol_1, lineafinintermedia);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[0, 0]), printFontNormal10, Brushes.Black, posCol_2, lineafinintermedia);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[0, 1]), printFontNormal10, Brushes.Black, posCol_3, lineafinintermedia);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[0, 2]), printFontNormal10, Brushes.Black, posCol_4, lineafinintermedia);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[0, 3]), printFontNormal10, Brushes.Black, posCol_5, lineafinintermedia);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[0, 4]), printFontNormal10, Brushes.Black, posCol_6, lineafinintermedia);

                e.Graphics.DrawString("FACTURA B", printFontNormal10, Brushes.Black, posCol_1, sublineafinintermedia);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[1, 0]), printFontNormal10, Brushes.Black, posCol_2, sublineafinintermedia);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[1, 1]), printFontNormal10, Brushes.Black, posCol_3, sublineafinintermedia);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[1, 2]), printFontNormal10, Brushes.Black, posCol_4, sublineafinintermedia);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[1, 3]), printFontNormal10, Brushes.Black, posCol_5, sublineafinintermedia);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[1, 4]), printFontNormal10, Brushes.Black, posCol_6, sublineafinintermedia);

                e.Graphics.DrawString("NOTA DE CREDITO", printFontNormal10, Brushes.Black, posCol_1, lineafinletrachica);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[2, 0]), printFontNormal10, Brushes.Black, posCol_2, lineafinletrachica);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[2, 1]), printFontNormal10, Brushes.Black, posCol_3, lineafinletrachica);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[2, 2]), printFontNormal10, Brushes.Black, posCol_4, lineafinletrachica);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[2, 3]), printFontNormal10, Brushes.Black, posCol_5, lineafinletrachica);
                e.Graphics.DrawString("$  " + Convert.ToString(matTotales[2, 4]), printFontNormal10, Brushes.Black, posCol_6, lineafinletrachica);

                decimal totalNeto = (matTotales[0, 0] + matTotales[1, 0] - matTotales[2, 0]);
                decimal totalDscto = (matTotales[0, 1] + matTotales[1, 1] - matTotales[2, 1]);
                decimal totalSubtotal = (matTotales[0, 2] + matTotales[1, 2] - matTotales[2, 2]);
                decimal totalIva = (matTotales[0, 3] + matTotales[1, 3] -  matTotales[2, 3]);
                decimal totalGral = (matTotales[0, 4] + matTotales[1, 4] - matTotales[2, 4]);

                e.Graphics.DrawLine(Pens.Black, 20, lineafinletrachica + 18, 750, lineafinletrachica + 18);
                //e.Graphics.DrawString("TOTALES", printFontNormal10, Brushes.Black, posCol_1, sublineafinchica);
                e.Graphics.DrawString("$  " + Convert.ToString(totalNeto), printFontNormal10, Brushes.Black, posCol_2, sublineafinchica);
                e.Graphics.DrawString("$  " + Convert.ToString(totalDscto), printFontNormal10, Brushes.Black, posCol_3, sublineafinchica);
                e.Graphics.DrawString("$  " + Convert.ToString(totalSubtotal), printFontNormal10, Brushes.Black, posCol_4, sublineafinchica);
                e.Graphics.DrawString("$  " + Convert.ToString(totalIva), printFontNormal10, Brushes.Black, posCol_5, sublineafinchica);
                e.Graphics.DrawString("$  " + Convert.ToString(totalGral), printFontNormal10, Brushes.Black, posCol_6, sublineafinchica);
                //GenerarTXT();
           
                tothojaimpnetog = 0;
                tothojaivaimporte = 0;
                tothojaimportetot = 0;
                totalri = 0;
                totalcf = 0;
                totalrni = 0;
                totalex = 0;
                totalmt = 0;
                totalxcategcli = 0;
              
                            }
        }

        private void GenerarTXT()
        {
          

   
        //string path  = "c:\Test.txt" ;

        //// Create or overwrite the file. 
        //FileStream fs = File.Create(path);

        //// Add text to the file. 

        //Byte info = UTF8Encoding.Unicode.ToString("hi"); 
       
        //fs.Write(info, 0, info.Length);
        //fs.Close();
   


        }

        }
    }

